package cycle.revise;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import jcolibri.cbrcore.CBRCase;
import cycle.RentDescription;
import cycle.RentSolution;

public class RevisionConfig {
	
	private Collection<CBRCase> selectedcases;
	private List<CBRCase> cases;
	
	public RevisionConfig(Collection<CBRCase> _selectedcases) {
		selectedcases = _selectedcases;
		cases = new ArrayList<CBRCase>(selectedcases);
	}
	
	public void printRevisionCases() {
		for(int i=0;i<this.selectedcases.size();i++) {
			RentDescription desc = getCaseDescription(i);
			RentSolution sol = getCaseSolution(i);
			System.out.println("Revised Cases: "+ " ("+ getCase(i).getID() + ";"+desc.getBairro()+";"+desc.getRegiao()+
					";"+desc.getAreaPrivativa()+";"+desc.getVagasGaragem()+";"+desc.getQuartos()+";"+
					desc.getSuites()+") Solution: ("+sol.getAluguelMensal()+";"+sol.getNomeEdificio()+");");
			
		}
	}
	
	public void saveCase(int _caseNumber, String _bairro, String _regiao, double _areaPrivativa, int _vagasGaragem,
			int _quartos, int _suites, double _aluguelMensal, String _nomeEdificio) {
		
		CBRCase _case = cases.get(_caseNumber);
		RentDescription desc = (RentDescription) _case.getDescription();
		
		desc.setBairro(_bairro);
		desc.setRegiao(_regiao);
		desc.setAreaPrivativa(_areaPrivativa);
		desc.setVagasGaragem(_vagasGaragem);
		desc.setQuartos(_quartos);
		desc.setSuites(_suites);
		
		RentSolution sol = (RentSolution) _case.getSolution();
		sol.setAluguelMensal(_aluguelMensal);
		sol.setNomeEdificio(_nomeEdificio);
	}
	
	public String getNomeEdificio(int _case) {
		RentSolution sol = getCaseSolution(_case);
		return sol.getNomeEdificio();
	}
	
	public double getAluguelMensal(int _case) {
		RentSolution sol = getCaseSolution(_case);
		return sol.getAluguelMensal();
	}
	
	public String getBairro(int _case) {
		RentDescription desc = getCaseDescription(_case);
		return desc.getBairro();
	}
	
	public String getRegiao(int _case) {
		RentDescription desc  = getCaseDescription(_case);
		return desc.getRegiao();
	}
	
	public double getAreaPrivativa(int _case) {
		RentDescription desc  = getCaseDescription(_case);
		return desc.getAreaPrivativa();
	}
	
	public int getVagasGaragem(int _case) {
		RentDescription desc  = getCaseDescription(_case);
		return desc.getVagasGaragem();
	}
	
	public int getQuartos(int _case) {
		RentDescription desc  = getCaseDescription(_case);
		return desc.getQuartos();
	}

	public int getSuites(int _case) {
		RentDescription desc  = getCaseDescription(_case);
		return desc.getSuites();
	}
	
	public CBRCase getCase(int i) {
		CBRCase _case = cases.get(i);
		return _case;
	}
	
	public RentDescription getCaseDescription(int _caseNumber) {
		CBRCase _case = getCase(_caseNumber);
		return (RentDescription) _case.getDescription();
	}
	
	public RentSolution getCaseSolution(int _caseNumber) {
		CBRCase _case = getCase(_caseNumber);
		return (RentSolution) _case.getSolution();
	}
}
